package com.huige.wiki.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.huige.wiki.entity.Ebook;
import com.huige.wiki.entity.EbookExample;
import com.huige.wiki.mapper.EbookMapper;
import com.huige.wiki.req.EbookQueryReq;
import com.huige.wiki.req.EbookSaveReq;
import com.huige.wiki.resp.EbookQueryResp;
import com.huige.wiki.resp.PageResp;
import com.huige.wiki.service.EbookService;
import com.huige.wiki.util.CopyUtil;
import com.huige.wiki.util.SnowFlake;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class EbookServiceImpl implements EbookService {

    @Autowired
    EbookMapper ebookMapper;

    @Autowired
    SnowFlake snowFlake;  // 雪花算法工具类

    @Override
    public PageResp<EbookQueryResp> list(EbookQueryReq ebookQueryReq) {
        // 创建一个条件查询
        EbookExample ebookExample = new EbookExample();
        EbookExample.Criteria criteria = ebookExample.createCriteria();
        if(!ObjectUtils.isEmpty(ebookQueryReq.getName())){
            criteria.andNameLike("%"+ebookQueryReq.getName()+"%");
        }
        // 根据二级分类查电子书
        if(!ObjectUtils.isEmpty(ebookQueryReq.getCategoryId2())){
            criteria.andCategory2IdEqualTo(ebookQueryReq.getCategoryId2());
        }
        //设置分页参数
        PageHelper.startPage(ebookQueryReq.getPage(), ebookQueryReq.getSize());
        List<Ebook> ebooks = ebookMapper.selectByExample(ebookExample);
        // 将查询结果封装到PageInfo对象中
        PageInfo<Ebook> ebookPageInfo = new PageInfo<>(ebooks);
        // 将Ebook对象列表转换为EbookQueryResp对象列表
        List<EbookQueryResp> list = CopyUtil.copyList(ebooks, EbookQueryResp.class);

        // 将PageInfo对象中的数据封装到PageResp对象中
        PageResp<EbookQueryResp> pageResp = new PageResp<>();
        pageResp.setTotal(ebookPageInfo.getTotal());
        pageResp.setList(list);

        return pageResp;

    }

    /**
     * 保存电子书(新增或者修改)
     * @param ebookQueryReq
     */
    @Override
    public void save(EbookSaveReq ebookQueryReq) {
        Ebook ebook = CopyUtil.copy(ebookQueryReq, Ebook.class);
        if(ObjectUtils.isEmpty(ebook.getId())){
            // 如果id为空，则新增
            ebook.setId(snowFlake.nextId());
            // 同时设置文档数
            ebook.setDocCount(0);
            ebook.setViewCount(0);
            ebook.setVoteCount(0);;
            ebookMapper.insert(ebook);
        }else{
            // 如果id不为空，则修改
            ebookMapper.updateByPrimaryKey(ebook);
        }
    }

    @Override
    public void delete(Long id) {
        ebookMapper.deleteByPrimaryKey(id);
    }
}
